/**
 *
 * @description: 函数扩展
 * @author: junyong.hong
 * @createTime: 2018/3/28
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
{
    function test(x,y = 'world') {
        // 如果y没有值，就采用默认值为world；如果有值，用采用传递过来的参数
        console.log('默认值',x,y)
    }
    test('hello');
    test('hello','hjy');

    // 错误写法：
    // function test(x,y = 'world',c)

    // 正确写法：
    // function test(x,y = 'world',c='bb')
}

{
    let x = 'test';
    // 都是取kill
    function test2(x,y=x) {
        console.log("作用域：",x,y);
    }
    // 作用域： kill kill
    test2('kill');


    function test3(c,y=x) {
        // 作用域： kill test
        console.log("作用域：",c,y);
    }
    test3('kill');
}

{
    // ...arg不确定传入几个参数，转成一个数组
    function test4(...arg) {
        for(let v of arg){
            // rest 1
            // rest 2
            // rest 3
            // rest 4
            // rest a
            console.log('rest',v);
        }
    }
    test4(1,2,3,4,'a');
}

{
    // 把数组转成一个离散的值
    console.log(...[1,2,4]);    // 1 2 4
    console.log('a',...[1,2,4]);// a 1 2 4
}

{
    // 函数
    // arrow函数名 v参数 v*2返回值
    let arrow = v => v*2;
    let arrow2 = () => 5;

    console.log('a',arrow(3));  // a 6
    console.log('a',arrow2());  // a 5
}

{
    // 尾调用（提升性能：函数地址嵌套）
    function tail(x) {
        console.log('tail',x);
    }
    function fx(x) {
        return tail(x)
    }
    fx(123)
}






























